// iisaccelerator - an iis isapi for upgrade web performance
//
// Copyright (C) 2006-2007 - BlueStone  (bluestn@163.com)
//
// This program is free software; you can redistribute it and/or
// modify it under the terms of the GNU General Public License
// as published by the Free Software Foundation; either version 2
// of the License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "timecvt.h"
   
time_t SystemTime2UnixTime( SYSTEMTIME &systime )
{
	FILETIME ftime;
	SystemTimeToFileTime( &systime, &ftime );
	return FileTime2UnixTime( ftime );
}


time_t FileTime2UnixTime(  FILETIME  &ft  )  
{  
    LONGLONG  ll;  

    ULARGE_INTEGER            ui;  
    ui.LowPart    =  ft.dwLowDateTime;  
    ui.HighPart   =  ft.dwHighDateTime;  

    ll            =  (ft.dwHighDateTime  <<  32 ) +  ft.dwLowDateTime;  
    time_t tTime = (time_t)((LONGLONG)(ui.QuadPart  -  116444736000000000)  /  10000000);  
	return tTime;
}  


void UnixTime2FileTime( time_t t, LPFILETIME pft )
{
    // Note that LONGLONG is a 64-bit value
    LONGLONG ll;

    ll = Int32x32To64(t, 10000000) + 116444736000000000;
    pft->dwLowDateTime = (DWORD)ll;
    pft->dwHighDateTime = (DWORD)ll >> 32;
}


void UnixTime2SystemTime(time_t t, LPSYSTEMTIME pst )
{
    FILETIME ft;

    UnixTime2FileTime(t, &ft);
    FileTimeToSystemTime(&ft, pst);
}